<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div></div>
    <script>
        // console.log(a);//undefined
        // if(a in window){
        //     var a=100;
        // }
        // console.log(a);//100


        // f=function(){
        //     return true;
        // };
        // g=function(){
        //     return false;
        // };
        // ~function(){
        //     //g变量提升---声明提前  g--undefined
        //     if(g()&&[]==![]){//g()--undefined()
        //         f=function(){return false;};
        //         function g(){
        //             return true;
        //         }
        //     }
        // }();
        // console.log(f());
        // console.log(g());


        
        // f=function(){
        //     return true;
        // };
        // g=function(){
        //     return false;
        // };
        // ~function(){
        //     //g变量提升---声明提前  g--undefined---函数 true
        //     if([]==![]){//true
        //         f=function(){return false;};
        //         function g(){
        //             return true;
        //         }
        //     }
        // }();
        // console.log(f());//false
        // console.log(g());//false
    </script>


<script>
        // var f=10,g=20;
        // function show(n){
        //     let g=30;
        //     f=n;
        //     console.log(f);
        //     console.log(g);
        // }
        // show(100)
        // console.log(f);
        // console.log(g);
        // //console.dir(show);//看的是函数的键值对

        // console.log(fn);//undefind
        // if(1==1){
        //     console.log(fn);//函数体
        //     function fn(){
        //         console.log("ok");
        //     }
        // }
        // console.log(fn)//函数体

        // var a=0;
        // if(true){
        //     a=1;
        //     function a(){}//====
        //     a=21;
        //     console.log(a);//21
        // }
        // console.log(a);//1

        // console.log(num);//und--100
        // console.log(fn);//und
        // if([]){
        //     // 只要进到当前if条件中，会立即对fn进行赋值；
        //     fn()//a
        //     var num=100;
        //     function fn(){console.log("a")}
        // }
        // console.log(fn);//函数体

       //只做 声明提前 赋值在后
        // console.log(fn);//und
        // console.log(fn(1,2));//报错  und(1,2)
        // var fn=function (n,m){
        //     return n+m;
        // }
        // console.log(fn(3,4));


        // fn--und   sum---0x002
        // sum();//2
        // fn();//报错
        // var fn=function(){
        //     console.log(1);
        // };

        // function sum(){
        //     console.log(2);
        // }
        // fn();
        // sum();

        // obj--und
        // console.log(obj.f1);//报错
        // var obj={
        //     f1:function(){
        //        console.log(1)
        //     }
        // }

        //return 下面的代码，可以做变量提升，但是不会赋值
        //return 后面的代码，不会变量提升
        // function fn(){
        //     console.log(a);//und
        //     console.log(f1);//报错
        //     return function f1(){
        //     }
        //     var a=3;
        // }
        // fn();


        // function fn(){
        //     console.log(f2);//函数体
        //     return function f1(){
        //     }
        //     function f2(){
        //         console.log("f2")
        //     }
        // }
        // fn();

        //var变量提升1次，赋值多次
        // var num=2;
        // var num=3;
        // console.log(num);//3


       // 后面的会把前面的覆盖
        // console.log(fn)//函数体3
        // function fn(){
        //    console.log(1);
        // }
        // function fn(){
        //    console.log(2);
        // }
        // function fn(){
        //    console.log(3);
        // }

        
        // console.log(fn)//函数体
        // function fn(){//声明+赋值  
        //     console.log(1)
        // }
        // var fn=2;//声明(不会执行)     
        // console.log(fn);//2

 
        // console.log(num);//und
        // var num = 1;
        // console.log(num);//1
        // var num = 2;
        // console.log(num);//2

        //fn--1-2-3-4-报错
        
        // fn();//4
        // function fn(){
        //     console.log(1);
        // }
        // function fn(){
        //     console.log(2);   
        // }
        // fn();//4
        // function fn(){
        //     console.log(3);
        // }
        // fn=100;
        // function fn(){
        //     console.log(4);   
        // }
        // fn();//报错

        
</script>

</body>
</html>